package com.ruoyi.common.core.domain.entity;

import com.alibaba.fastjson2.annotation.JSONField;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import lombok.Data;
import lombok.experimental.Accessors;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;

/**
 * 用户对象 sys_user
 */
@Data
@TableName("sys_user")
@Accessors(chain = true)
public class SysUser extends BaseEntity<SysUser> {
    private static final long serialVersionUID = 1L;

    /**
     * 用户ID
     */
    @TableId
    private Long userId;

    /**
     * 部门ID
     */
    private Long deptId;

    private String deptName;
    /**
     * 用户类型（00系统用户  01采购方用户）
     */
    private String userType;
    /**
     * openId
     */
    private String openId;
    /**
     * 关键字
     */
    private String keywords;
    /**
     * 签名路径
     */
    private String signaturePath;
    /**
     * 签名url
     */
    private String signatureUrl;

    /**
     * 用户账号
     */
    private String userName;

    /**
     * 角色key
     */
    @TableField(exist = false)
    private String roleKey;

    /**
     * 用户昵称
     */
    private String nickName;

    /**
     * 用户邮箱
     */
    private String email;

    /**
     * 手机号码
     */
    private String phonenumber;

    /**
     * 办公电话
     */
    private String officePhone;

    /**
     * 清退恢复专家
     */
    @TableField(value = "is_clear_expert")
    private Boolean clearExpert;

    /**
     * 用户性别
     */
    private String sex;

    /**
     * 用户头像
     */
    private String avatar;

    /**
     * 密码
     */
    private String password;

    /**
     * 帐号状态（0正常 1停用）
     */
    private String status;

    /**
     * 删除标志（1代表删除 0代表存在）
     */
    @TableField(value = "is_del")
    private boolean del;

    /**
     * 最后登录IP
     */
    private String loginIp;

    /**
     * 最后登录时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date loginDate;

    /**
     * 部门对象
     */
    @TableField(exist = false)
    private SysDept dept;

    /**
     * 角色对象
     */
    @TableField(exist = false)
    private List<SysRole> roles;

    /**
     * 角色组
     */
    @TableField(exist = false)
    private Long[] roleIds;

    /**
     * 岗位组
     */
    private String postIds;

    /**
     * 岗位组
     */
    private String postNames;

    /**
     * 角色ID
     */
    private Long roleId;

    /**
     * 角色名称
     */
    private String roleName;

    /**
     * 角色对应部门名称
     */
    private String roleDeptName;

    private String createBy;

    private String updateBy;
    private String remark;

    /**
     * 祖级列表
     */
    private String deptAncestors;
    /**
     * 二维码地址
     */
    private String buildQrCodeUrl;
    /**
     * 专家id
     */
    private Long expertId;

    /**
     * 身份证号码
     */
    private String idNumber;

    /**
     * 管理的部门ids
     */
    private String managerDeptIds;
    /**
     * 管理的部门ids
     */
    private String managerDeptValue;

    /**
     * 管理的部门
     */
    private String managerDept;

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;

    @JSONField(format = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;

    /**
     * 日期
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date notTipsBuildTime;

    /**
     * 是否显示绑定微信
     */
    @TableField(exist = false)
    private boolean showBindWeixin = true;
    private String kiamUserId;         // 用户编号
    private String kiamJobId;          // 岗位ID
    private String kiamUserNo;         // 用户编号
    private String kiamJobType;        // 任职类型 (10在职，20兼职，30挂职，40借调)
    private String kiamJobTitle;       // 职称
    private String kiamOrgId;          // 部门ID

    public boolean isAdmin() {
        if(roles == null || roles.size() == 0){
            return false;
        }
        return roles.stream().filter(r->"admin".equals(r.getRoleKey())).collect(Collectors.toList()).size() > 0;
    }


    public SysUser(Long userId) {
        this.userId = userId;
    }

    public SysUser() {
    }

    public String getUserIdStr() {
        return this.userId + "";
    }

    public Long[] getRoleIds() {
        if (roleIds == null && roleId != null) {
            roleIds = new Long[]{roleId};
        }
        return roleIds;
    }

    public boolean isShowBindWeixin() {
        if (openId == null || openId.length() == 0) {
            if (notTipsBuildTime == null || notTipsBuildTime.before(new Date())) {
                showBindWeixin = true;
            } else {
                showBindWeixin = false;
            }
        } else {
            showBindWeixin = false;
        }
        return showBindWeixin;
    }

    public Long getId() {
        return userId;
    }
}
